"use strict";

var fs = require('fs');
var path = require('path');

function findLargest(dir, cb) {
    // 读取目录下的所有文件
    fs.readdir(dir, function (er, files) {
        if (er) return cb(er);
        var counter = files.length;
        var errored = false;
        var stats = [];

        files.forEach(function (file, index) {
            // 读取文件信息
            fs.stat(path.join(dir, file), function (er, stat) {
                if (errored) return;

                if (er) {
                    errored = true;
                    return cb(er);
                }

                stats[index] = stat;
                // 事先算好有多少个文件，读完 1 个文件信息，计数减 1，当为 0 时，说明读取完毕，
                // 此时执行最终的比较操作
                if (--counter == 0) {
                    var largest = stats
                        .filter(function (stat) {
                            return stat.isFile()
                        })
                        .reduce(function (prev, next) {
                            if (prev.size > next.size) return prev;
                            return next;
                        })
                    cb(null, files[stats.indexOf(largest)])
                }
            })
        })

    })
}

findLargest('./', function (er, filename) {
    if (er) return console.error(er);
    console.log('largest file was:', filename);
});